#include "stm32f10x.h"                  // Device header

u8 KeyNumber;		//当前键值

//Key初始化
void Key_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

//获取当前状态
u8 Key_GetState(void)
{
	if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0)		//按键1按下返回1
	{
		return 1;
	}
	if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==0)	//按键2按下返回2
	{
		return 2;
	}
	return 0;			//没有按键按下返回0
}

//返回当前按键值
u8 Key_GetNum(void)
{
	static u8 temp;
	if(KeyNumber != 0)//如果键值不为0，返回键值
	{
		temp = KeyNumber;
		KeyNumber = 0;
		return temp;
	}
	return 0;
}

void Key_Tick(void)
{
	static u8 Count;
	static u8 LastStatus;			//上次状态
	static u8 CurrentStatus;	//当前状态
	
	Count++;
	
	if(Count >= 20)		//每20次采集一次引脚值
	{
		Count = 0;
		
		LastStatus = CurrentStatus;			//更新上次状态
		CurrentStatus = Key_GetState();	//更新当前状态
		
		if(CurrentStatus == 0 && LastStatus != 0)//检测上升沿，若上次状态不为0且当前状态为0，则证明有上升沿
		{
			KeyNumber = LastStatus;				//返回按键值
		}
	}
}

